let a: number;
let b: string;

//字面量, 类似常量, 无法更改
let c: 10;
//在给定的集合中选择(联合类型)
let d: 'male' | 'female';
let e: string | boolean;
e = 'hello';
e = true;

//any 随便写, 和js一样了...  一般不用这个
let f: any;//显式any, 类似于空接口, 谁都可以接
f = 'hello';
f = 10;

let g;//隐式any(不要使用)
g = 10;
d = g;//干扰到了之前的约束变量, 污染


//类型安全的any, 不能付给别的变量
let h: unknown;
h = '100';
if (typeof h === "string") {
    b = h;
}

h = 'hello';
//断言h是string, 是就干, 不是滚蛋
b = h as string;
h = "world";
//断言的另一种写法
b = <string>h;

console.log('b is: ' + b);


function f1(): void {

    //没有返回值
    return null;
    // return undefined;
}

//git@gitee.com:realife_cheng/typescript-demo.git
function f2(): never {
    //连空都没有...
    //调用就抛出错误... 这就是什么都没有,程序挂了...
    throw new Error('err......');
}

